class URLmanager(object):
    def __init__(self):
        # 初始化待爬取URL和已爬取URL集合
        self.new_urls = set()
        self.old_urls = set()

    def save_new_url(self, url):
        # 将单条URL保存到待爬取的集合中
        if url is not None:
            if url not in self.new_urls and url not in self.old_urls:
                print("保存新URL:()".format(url))
                self.new_urls.add(url)

    def save_new_urls(self, url_list):
        # 批量保存URL
        for url in url_list:
            self.save_new_url(url)

    def get_new_url(self):
        # 去除一条未爬取的URL，同时保存到已爬取的URL中
        if self.get_new_url_num() > 0:
            url = self.new_urls.pop()
            self.old_urls.add(url)
            return url
        else:
            return None

    def get_new_url_num(self):
        # 返回未爬取的URL数量
        return len(self.new_urls)

    def get_old_url_num(self):
        # 返回已经爬取的URL数量
        return len(self.old_urls)

"""
代码分析：
1、首先初始化两个set数据类型。使用set的好处是，set存储数据唯一，不会保存重复的URL，从而避免重复的抓取
2、在保存新的URL时，需要判断是否包含在待爬取集合中，股不存在，再判断是否保存在已经爬取的集合中；
两个集合中都不包含此URL，才将其存储至new_url中。同时加了一条打印语句，以便在输出中查看具体URL信息，
更好的方法是使用日志进行处理。
3、从new_urls中取出一条URL进行爬取时，同时要将该URL保存至old_urls中。
4、返回未爬取的和已爬取的URL的数量。

"""
